/*
 * File Name：ImageViewCareIME.java
 * Copyright：Copyright 2008-2014 CiWong.Inc. All Rights Reserved.
 * Description： ImageViewCareIME.java
 * Modify By：res-jianpingliu
 * Modify Date：2014-12-31
 * Modify Type：Add
 */
package com.ciwong.mobilelib.widget;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.widget.ImageView;

import com.ciwong.libs.utils.CWLog;

/**
 * 用户监听输入法的键盘是否显示的ImageView
 * 
 * 把ImageViewCareIME放在软键盘出现或隐藏时布局位置发生改变的容器中(建议设置成透明的，宽高很小不会影响界面的其他控件)，
 * 然后根据ImeUiChangeListener接口的回调方法中的bottom值判断软键盘是显示还是隐藏状态
 * 
 * @author res-jianpingliu
 * @version ciwong v.1.0 2014-12-31
 * @since ciwong v.1.0
 */
public class ImageViewCareIME extends ImageView
{
    private int mPreBottom = 0;

    private ImeUiChangeListener mImeUiChangeListener;

    /**
     * 用户监听输入法的键盘是否显示的ImageView
     * 
     * 把ImageViewCareIME放在软键盘出现或隐藏时布局位置发生改变的容器中(建议设置成透明的，宽高很小不会影响界面的其他控件)，
     * 然后根据ImeUiChangeListener接口的回调方法中的bottom值判断软键盘是显示还是隐藏状态
     * 
     * @param context
     *            上下文
     */
    public ImageViewCareIME(Context context)
    {
        this(context, null);
    }

    /**
     * 用户监听输入法的键盘是否显示的ImageView
     * 
     * 把ImageViewCareIME放在软键盘出现或隐藏时布局位置发生改变的容器中(建议设置成透明的，宽高很小不会影响界面的其他控件)，
     * 然后根据ImeUiChangeListener接口的回调方法中的bottom值判断软键盘是显示还是隐藏状态
     * 
     * @param context
     *            上下文
     * @param attrs
     *            属性集合
     */
    public ImageViewCareIME(Context context, AttributeSet attrs)
    {
        super(context, attrs);
    }

    @Override
    protected void onDraw(Canvas canvas)
    {
        super.onDraw(canvas);

        Rect r = new Rect();
        if (getGlobalVisibleRect(r))
        {
            if (r.bottom != mPreBottom)
            {
                mPreBottom = r.bottom;

                CWLog.d("ljp", "Change = " + r.bottom);
            }
        }

        if (null != mImeUiChangeListener)
        {
            mImeUiChangeListener.onImeUiChange(r.bottom);
        }
    }

    /**
     * 软键盘UI改变监听器
     * 
     * @author res-jianpingliu
     * 
     */
    public interface ImeUiChangeListener
    {
        /**
         * UI改变回调方法
         * 
         * @param bottom
         *            ImageViewCareIME的bottom值
         */
        void onImeUiChange(int bottom);
    }

    /**
     * 设置 软键盘UI改变监听器
     * 
     * @param imeUiChangeListener
     *            软键盘UI改变监听器
     */
    public void setOnImeUiChangeListener(ImeUiChangeListener imeUiChangeListener)
    {
        mImeUiChangeListener = imeUiChangeListener;
    }
}
